﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TaskManager_WCG.Models;

namespace TaskManager_WCG.Controllers
{
    public class HomeController : Controller
    {
        Model1 model = new Model1();
        public ActionResult Index(int uid = 0,string Content = "" )
        {
            //获取所有用户，转换为列表
            var users = model.UserInfo.ToList();
            //在用户列表下拉框首选位置添加全部选项
            users.Insert(0, new UserInfo() { name = "全部", uid = 0 });
            //填充下拉框数据，属性名与实体属性保持一致
            ViewBag.uid = new SelectList(users, "uid", "name");
            //条件查询
            var list = model.Task.Where(p => p.Content.Contains(Content) && (uid == 0 || p.uid == uid)).ToList();
            //var list2 = model.Task.Where(p => p.Content.Contains(Content) && (uid == 0 || p.uid == uid) && (state == 0 || p.TaskState == state)).ToList();
            //返回数据到主页
            return View(list);
        }

        public ActionResult Create()
        {
            //填充下拉框数据
            ViewBag.uid = new SelectList(model.UserInfo, "uid", "name");
            //显示添加页面
            return View();
        }
        [HttpPost]
        public ActionResult Create(Task task)
        {
            if (ModelState.IsValid)
            {
                // 与用户交互的属性，直接使用传递的数据；
                // 特殊处理：未与用户交互，且默认值无法满足数据库要求的属性必须重新赋值（数据库默认值）。
                task.AddTime = DateTime.Now;
                task.TaskState = 1;
                task.FinishedTime = null;
                //执行添加操作
                model.Task.Add(task);
                //保存至数据库
                var res = model.SaveChanges();
                if (res>0)
                {
                    //如果添加成功返回主页
                    return RedirectToAction("Index");
                }
            }
            //否则不跳转
            //填充下拉框数据，属性名与实体属性保持一致
            ViewBag.uid = new SelectList(model.UserInfo, "uid", "name");
            return View(task);
        }
        public ActionResult Edit(int? id)
        {
            if (id==null)
            {
                //如果参数为null，则返回主页
                return RedirectToAction("Index");
            }
            //查询需要修改的id的数据
            var task = model.Task.FirstOrDefault(p => p.TaskID == id);
            if (task == null)
            {
                //如果未找到数据，则返回主页
                return RedirectToAction("Index");
            }
            //显示要修改的数据
            //填充下拉框数据，属性名与实体属性保持一致
            //数据源，      值属性，显示属性，默认值
            ViewBag.uid = new SelectList(model.UserInfo, "uid", "name",task.uid);
            return View(task);
        }
        [HttpPost]
        public ActionResult Edit(Task task)
        {
            //判读前端传递过来的数据是否满足注释属性的验证规则
            if (ModelState.IsValid)
            {
                //查询需要修改的数据
                var temp = model.Task.FirstOrDefault(p => p.TaskID == task.TaskID);
                if (temp == null)
                    //如果未找到数据，则返回列表页面
                    return RedirectToAction("Index");
                //重新赋值，只修改前台传回来的数据；其他属性数据，须根据业务需求修改
                temp.Content = task.Content;
                temp.FinishedTime = task.FinishedTime;
                temp.TaskPriority = task.TaskPriority;
                temp.TaskState = task.TaskState;
                temp.uid = task.uid;
                //将更改保存至数据库
                var res = model.SaveChanges();
                if (res > 0)
                    //如果添加成功，返回主页
                    return RedirectToAction("Index");
            }
            //显示要修改的数据
            //填充下拉框数据，属性名与实体属性保持一致
            ViewBag.uid = new SelectList(model.UserInfo, "uid", "name", task.uid);
            return View(task);
        }

        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                //如果参数为null，则返回主页
                return RedirectToAction("Index");
            }
            //查询需要修改的id的数据
            var task = model.Task.FirstOrDefault(p => p.TaskID == id);
            if (task == null)
            {
                //如果未找到数据，则返回主页
                return RedirectToAction("Index");
            }
            //显示查询到的数据
            return View(task);
        }
        [HttpPost]
        public ActionResult Delete(int? id)
        {
            if (id==null)
            {
                // 如果id为空返回false
                return Json(false);
            }
            var list = model.Task.FirstOrDefault(p => p.TaskID == id);
            if (list==null)
            {
                // 如果list为空返回false
                return Json(false);
            }
            // 执行删除操作
            model.Task.Remove(list);
            // 保存至数据库
            var res = model.SaveChanges()>0;
            // 返回运行结果
            return Json(res);
        }
    }
}